package cntrll

import (
	"crypto/md5"
	"encoding/hex"
	"github.com/gin-gonic/gin"
	"os"
	"os/exec"
	"strings"
)

var T string //store token
type datas struct {
	CntainerID string `json:"cntainer_id"` //容器id
	Name       string `json:"name"`        //容器名称
	Cpu        string `json:"cpu"`         //cpu占用率

	MemUsagelimit string `json:"mem_usagelimit"` //容器使用总内存和极限内存

	Mem string `json:"mem"` //容器内存占用率

	NetIO string `json:"net_io"` //容器通过网络接口接收和发送的数据量

	BlockIO string `json:"block_io"` //容器从主机上的块设备写入和的读取数据量

	Pids string `json:"pids"` //容器创建的进程或线程数
}

func Sdata(c *gin.Context) {
	//c.JSON(200, gin.H{
	//	"message": "pong",
	//})

	//docker stats --all --format "table {{.Container}}*$*{{.CPUPerc}}*$*{{.MemUsage}}/end" --no-stream

	var cmd *exec.Cmd
	var data []byte
	var err error
	//docker stats  --all --format "table {{.Container}}*##*{{.Name}}*##*{{.ID}}*##*{{.CPUPerc}}*##*{{.MemUsage}}*##*{{.NetIO}}*##*{{.BlockIO}}*##*{{.MemPerc}}*##*{{.PIDs}}/end" --no-stream
	cmd = exec.Command(" docker stats  --format \"table {{.Container}}*##*{{.Name}}*##*{{.CPUPerc}}*##*{{.MemUsage}}*##*{{.NetIO}}*##*{{.BlockIO}}*##*{{.MemPerc}}*##*{{.PIDs}}/end\" --no-stream")
	// or cmd = exec.Command("bash", "-c", "put your commands here")
	data, err = cmd.Output()

	if err == nil {
		var temp string
		var dodata []datas
		temp = string(data)

		dataslice := strings.Split(temp, "/end")

		for i := 1; i < len(dataslice); i++ {
			var d datas
			tp := strings.Split(dataslice[i], "*##*")
			if len(tp) != 7 {
				continue
			}

			d.CntainerID = tp[0]
			d.Name = tp[1]
			d.Cpu = tp[2]
			d.MemUsagelimit = tp[3]
			d.NetIO = tp[4]
			d.Mem = tp[5]
			d.Pids = tp[6]

			dodata = append(dodata, d)
		}
		c.JSON(200, dodata)

	} else {
		c.JSON(502, err)
	}

}

func cmd5(data []byte) string {
	h := md5.New()
	h.Write([]byte(data)) // 需要加密的字符串为 123456
	cipherStr := h.Sum(nil)
	return hex.EncodeToString(cipherStr)
}

func Register(c *gin.Context) {

}

func ChangePSD(c *gin.Context) {

}

func Login(c *gin.Context) {

	name := c.PostForm("user")
	psd := c.PostForm("psd")

	data, err := os.ReadFile("/uuu/userdata")
	if err != nil {
		c.JSON(404, err)
		return
	}

	u := strings.Split(string(data), "**")

	if u[0] == name && u[1] == psd {
		T = cmd5(data)
		c.JSON(200, T)

		return
	} else {
		c.JSON(502, "验证失败")
	}

}
